package reflect;

import java.io.File;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 自动调用与当前类Test4在同一个包中所有类里的无参且公开方法(类自己定义的方法)
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        File file = new File(
            Test4.class.getResource(".").toURI()
        );
        File[] subs = file.listFiles(f->f.getName().endsWith(".class"));
        for(File sub : subs){
            String fileName = sub.getName();
            String className = fileName.replace(".class","");
            String packName = Test3.class.getPackage().getName();
            Class cls = Class.forName(packName+"."+className);
            Object obj = cls.newInstance();

            //获取该类的所有方法
            Method[] methods = cls.getDeclaredMethods();
            for(Method method : methods){
                if(
                   method.getParameterCount()==0//判断该方法是否无参
                            &&
                   method.getModifiers()==Modifier.PUBLIC//判断该方法是否为公开方法
                ){
                    method.invoke(obj);
                }
            }


        }
    }
}
